﻿using System;
using System.Text;
using IAM.Interface.Model;
using System.Data;
using IAM.Interface.Model.ENUM;

namespace IAM.Interface.ModelExample
{
    /// <summary>
    /// 代理管理示例
    /// </summary>
    public class DelegationMagagement
    {
        #region  成员方法
        #region 获取可代理模块列表
        /// <summary>
        /// 获取可代理模块列表
        /// 
        /// 1.获取可以代理的模块数据集合datasetModules
        /// 1.【说明】可以是dataset/datatable/arrylist... ...
        /// 2.声明一个代理设置的模块列表Modules
        /// 3.遍历datasetModules集合
        ///   3.1声明一个单个可设置模块的配置信息Module
        ///   3.2设置Module信息
        ///   3.2.1 ID属性：模块的唯一标识
        ///   3.2.2 Display属性：模块的显示名称
        ///   3.2.3 Type属性：可以进行代理操作的类型
        ///   “Delegate”：代理
        ///   “OperateAs”：代审批
        ///   “Both”：2种操作均支持
        /// end for3.
        /// 4.返回一个可代理模块列表类实体
        /// </summary>
        /// <returns>可以进行代理设置的模块列表</returns>
        public Modules GetModuleList()
        {
            //1.获取可以代理的模块数据集合datasetModules
            //1.【说明】可以是dataset/datatable/arrylist... ...
            DataSet datasetModules = new DataSet();
            //2.声明一个代理设置的模块列表Modules
            Modules modules = new Modules();
            //3.遍历datasetModules集合
            try
            {
                #region 伪代码,此部分代码请各个系统自己完成
                for (int i = 0; i < datasetModules.Tables[0].Rows.Count; i++)
                {
                    //  3.1声明一个单个可设置模块的配置信息Module
                    Module module = new Module();
                    //  3.2设置Module信息
                    //  3.2.1 ID属性：模块的唯一标识
                    module.ID = datasetModules.Tables[0].Rows[i]["ID"].ToString();
                    //  3.2.2 Display属性：模块的显示名称
                    module.Display = datasetModules.Tables[0].Rows[i]["Display"].ToString();
                    //  3.2.3 Type属性：可以进行代理操作的类型
                    //  “Delegate”：代理
                    //  “OperateAs”：代审批
                    //  “Both”：2种操作均支持
                    string strType = datasetModules.Tables[0].Rows[i]["Type"].ToString();
                    switch (strType.ToLower())
                    {
                        case "delegate":
                            module.Type = ModuleType.Delegate;
                            break;
                        case "operateas":
                            module.Type = ModuleType.OperateAs;
                            break;
                        case "both":
                            module.Type = ModuleType.Both;
                            break;
                    }
                    //3.3 将module添加到模块列表Modules
                    modules.Items.Add(module);
                }//end 3.
                #endregion
            }
            catch//此部分仅仅用来
            {
                Module m1 = new Module();
                m1.ID = "Module1";
                m1.Display = "Module 1";
                m1.Type = ModuleType.Delegate;

                Module m2 = new Module();
                m2.ID = "Module2..";
                m2.Display = "Module 2..";
                m2.Type = ModuleType.OperateAs;

                Module m3 = new Module();
                m3.ID = "Module3..";
                m3.Display = "Module 3..";
                m3.Type = ModuleType.Both;

                modules.Items.Add(m1);
                modules.Items.Add(m2);
                modules.Items.Add(m3);

            }
            //4.返回一个可代理模块列表类实体
            return modules;
        }
        #endregion
        #region 获取用户代理信息
        /// <summary>
        /// 获取用户代理信息
        /// 
        /// 1.声明一个人员帐号实例 delaccountinfo
        /// 2.使用accountinfo填充delaccountinfo
        /// 3.声明代理设置信息列表
        /// 4.*获取本系统中该人员可以代理的模块和模块代理人id datasetdelegatoin
        /// 5.遍历datasetdelegatoin
        ///   5.1 声明单条代理设置信息 Delegation 
        ///   5.2 设置代理信息
        ///   5.2.1 设置代理的模块标识 Module 
        ///   5.2.2 Type属性：代理类型
        ///   5.2.3 BeginDate属性：代理生效起始日期
        ///   5.2.4 EndDate属性：代理生效结束日期
        ///   5.3 声明一个 代理人信息 实体 Delegator
        ///   5.4 声明一个人员帐号实例 AccountInfo
        ///   5.5 *根据代理人id获取 人员帐号信息
        ///   5.6 使用5.5获取的信息填充Delegator
        /// 5.end for
        /// 6.声明一个 AIDelegations 实体
        /// 7.填充AIDelegations 
        /// 8.返回AIDelegations
        /// </summary>
        /// <param name="accountinfo">人员帐号信息</param>
        /// <returns>代理设置信息列表</returns>
        public AIDelegations GetDelegationInfo(AccountInfo accountinfo)
        {
            //1.声明一个人员帐号实例 delaccountinfo
            AccountInfo delaccountinfo = new AccountInfo();
            //2.使用accountinfo填充delaccountinfo
            delaccountinfo.HRISEID = accountinfo.HRISEID;
            delaccountinfo.ADAccount = accountinfo.ADAccount;
            delaccountinfo.CSLAccount = accountinfo.CSLAccount;
            delaccountinfo.CILX500 = accountinfo.CILX500;
            delaccountinfo.UPI = accountinfo.UPI;
            delaccountinfo.AppAccount = accountinfo.AppAccount;
            //3.声明代理设置信息列表
            Delegations delegations = new Delegations();
            //4.*获取本系统中该人员可以代理的模块和模块代理人id datasetdelegatoin
            DataSet datasetdelegatoin = new DataSet();
            try
            {
                #region 此段代码请各系统完成
                //5.遍历datasetdelegatoin
                for (int i = 0; i < datasetdelegatoin.Tables[0].Rows.Count; i++)
                {
                    //  5.1 声明单条代理设置信息 Delegation 
                    Delegation delegation = new Delegation();
                    //  5.2 设置代理信息
                    //  5.2.1 设置代理的模块标识 Module 
                    delegation.Module = datasetdelegatoin.Tables[0].Rows[i]["Module"].ToString();//各个系统的字段可能有所不同
                    //  5.2.2 Type属性：代理类型
                    string strType = datasetdelegatoin.Tables[0].Rows[i]["Type"].ToString();//各个系统的字段可能有所不同
                    switch (strType.ToLower())
                    {
                        case "delegate":
                            delegation.Type = ModuleType.Delegate;
                            break;
                        case "operateas":
                            delegation.Type = ModuleType.OperateAs;
                            break;
                        case "both":
                            delegation.Type = ModuleType.Both;
                            break;
                    }
                    //  5.2.3 BeginDate属性：代理生效起始日期
                    delegation.BeginDate = System.DateTime.Now;
                    //  5.2.4 EndDate属性：代理生效结束日期
                    delegation.EndDate = System.Convert.ToDateTime(datasetdelegatoin.Tables[0].Rows[i]["EndDate"].ToString());//各个系统的字段可能有所不同
                    //  5.3 声明一个 代理人信息 实体 Delegator
                    delegation.Delegator = new AccountInfo();
                    //  5.4 声明一个人员帐号实例 AccountInfo
                    AccountInfo delegatorAI = new AccountInfo();
                    //  5.5 *根据代理人id获取 人员帐号信息，各系统自己获取
                    DataSet dsAccountInfo = new DataSet();
                    delegatorAI.HRISEID = dsAccountInfo.Tables[0].Rows[0]["HRISEID"].ToString();
                    delegatorAI.ADAccount = dsAccountInfo.Tables[0].Rows[0]["ADAccount"].ToString();
                    delegatorAI.CSLAccount = dsAccountInfo.Tables[0].Rows[0]["CSLAccount"].ToString();
                    delegatorAI.CILX500 = dsAccountInfo.Tables[0].Rows[0]["CILX500"].ToString();
                    delegatorAI.UPI = dsAccountInfo.Tables[0].Rows[0]["UPI"].ToString();
                    delegatorAI.AppAccount = dsAccountInfo.Tables[0].Rows[0]["AppAccount"].ToString();
                    //  5.6 使用5.5获取的信息填充Delegator
                    delegation.Delegator = delegatorAI;
                    //  5.7 将 delegation 填充到delegations
                    delegations.Items.Add(delegation);
                }//5.end for
                //6.声明一个 AIDelegations 实体
                AIDelegations aidelegations = new AIDelegations();
                //7.填充AIDelegations 
                aidelegations.AccountInfo = delaccountinfo;
                aidelegations.Delegations = delegations;
                //8.返回AIDelegations
                return aidelegations;
                #endregion
            }
            catch
            {
                Delegations dgs = new Delegations();

                Delegation dg = new Delegation();
                dg.Module = "Module1";
                dg.Type = ModuleType.OperateAs;
                dg.BeginDate = System.DateTime.Now;
                dg.EndDate = dg.BeginDate.AddMonths(3);
                dg.Delegator = new AccountInfo();
                dg.Delegator.HRISEID = "new1234567";
                dg.Delegator.ADAccount = "newad4\\lisi";
                dg.Delegator.CSLAccount = "newlisi";
                dg.Delegator.CILX500 = "newlisi";
                dg.Delegator.UPI = "CV-88889";
                dg.Delegator.AppAccount = "new CV-Li Si Account";



                Delegation dg2 = new Delegation();
                dg2.Module = "Module2...";
                dg2.Type = ModuleType.OperateAs;
                dg2.BeginDate = System.DateTime.Now;
                dg2.EndDate = dg2.BeginDate.AddMonths(3);
                dg2.Delegator = new AccountInfo();
                dg2.Delegator.HRISEID = "2new1234567";
                dg2.Delegator.ADAccount = "2newad4\\lisi";
                dg2.Delegator.CSLAccount = "2newlisi";
                dg2.Delegator.CILX500 = "2newlisi";
                dg2.Delegator.UPI = "2CV-88889";
                dg2.Delegator.AppAccount = "2new CV-Li Si Account";


                dgs.Items.Add(dg);
                dgs.Items.Add(dg2);


                AIDelegations aid = new AIDelegations();
                aid.AccountInfo = delaccountinfo;
                aid.Delegations = dgs;
                return aid;
            }
            
        }
        #endregion
        #region 设置用户代理信息
        /// <summary>
        /// 设置用户代理信息
        /// 请参阅GetDelegationInfo方法中的说明
        /// </summary>
        /// <param name="aidelegations">用户代理信息</param>
        /// <returns>设置后的用户代理信息</returns>
        public AIDelegations SetDelegationInfo(AIDelegations aidelegations)
        {
            //1.声明一个人员帐号实例 delaccountinfo
            AccountInfo delaccountinfo = new AccountInfo();
            //2.使用accountinfo填充delaccountinfo
            delaccountinfo.HRISEID = aidelegations.AccountInfo.HRISEID;
            delaccountinfo.ADAccount = aidelegations.AccountInfo.ADAccount;
            delaccountinfo.CSLAccount = aidelegations.AccountInfo.CSLAccount;
            delaccountinfo.CILX500 = aidelegations.AccountInfo.CILX500;
            delaccountinfo.UPI = aidelegations.AccountInfo.UPI;
            delaccountinfo.AppAccount = aidelegations.AccountInfo.AppAccount;
            //3.声明代理设置信息列表
            Delegations delegations = new Delegations();
            //4.*获取本系统中该人员可以代理的模块和模块代理人id datasetdelegatoin
            DataSet datasetdelegatoin = new DataSet();
            try
            {
                #region 此段代码请各系统完成
                //5.遍历datasetdelegatoin
                for (int i = 0; i < datasetdelegatoin.Tables[0].Rows.Count; i++)
                {
                    //  5.1 声明单条代理设置信息 Delegation 
                    Delegation delegation = new Delegation();
                    //  5.2 设置代理信息
                    //  5.2.1 设置代理的模块标识 Module 
                    delegation.Module = datasetdelegatoin.Tables[0].Rows[i]["Module"].ToString();//各个系统的字段可能有所不同
                    //  5.2.2 Type属性：代理类型
                    string strType = datasetdelegatoin.Tables[0].Rows[i]["Type"].ToString();//各个系统的字段可能有所不同
                    switch (strType.ToLower())
                    {
                        case "delegate":
                            delegation.Type = ModuleType.Delegate;
                            break;
                        case "operateas":
                            delegation.Type = ModuleType.OperateAs;
                            break;
                        case "both":
                            delegation.Type = ModuleType.Both;
                            break;
                    }
                    //  5.2.3 BeginDate属性：代理生效起始日期
                    delegation.BeginDate = System.DateTime.Now;
                    //  5.2.4 EndDate属性：代理生效结束日期
                    delegation.EndDate = System.Convert.ToDateTime(datasetdelegatoin.Tables[0].Rows[i]["EndDate"].ToString());//各个系统的字段可能有所不同
                    //  5.3 声明一个 代理人信息 实体 Delegator
                    delegation.Delegator = new AccountInfo();
                    //  5.4 声明一个人员帐号实例 AccountInfo
                    AccountInfo delegatorAI = new AccountInfo();
                    //  5.5 *根据代理人id获取 人员帐号信息，各系统自己获取
                    DataSet dsAccountInfo = new DataSet();
                    delegatorAI.HRISEID = dsAccountInfo.Tables[0].Rows[0]["HRISEID"].ToString();
                    delegatorAI.ADAccount = dsAccountInfo.Tables[0].Rows[0]["ADAccount"].ToString();
                    delegatorAI.CSLAccount = dsAccountInfo.Tables[0].Rows[0]["CSLAccount"].ToString();
                    delegatorAI.CILX500 = dsAccountInfo.Tables[0].Rows[0]["CILX500"].ToString();
                    delegatorAI.UPI = dsAccountInfo.Tables[0].Rows[0]["UPI"].ToString();
                    delegatorAI.AppAccount = dsAccountInfo.Tables[0].Rows[0]["AppAccount"].ToString();
                    //  5.6 使用5.5获取的信息填充Delegator
                    delegation.Delegator = delegatorAI;
                    //  5.7 将 delegation 填充到delegations
                    delegations.Items.Add(delegation);
                }//5.end for
                //6.声明一个 AIDelegations 实体
                AIDelegations adlt = new AIDelegations();
                //7.填充AIDelegations 
                adlt.AccountInfo = delaccountinfo;
                adlt.Delegations = delegations;
                //8.返回AIDelegations
                return adlt;
                #endregion
            }
            catch
            {
                Delegations dgs = new Delegations();

                Delegation dg = new Delegation();
                dg.Module = "Module1";
                dg.Type = ModuleType.OperateAs;
                dg.BeginDate = System.DateTime.Now;
                dg.EndDate = dg.BeginDate.AddMonths(3);
                dg.Delegator = new AccountInfo();
                dg.Delegator.HRISEID = "new1234567";
                dg.Delegator.ADAccount = "newad4\\lisi";
                dg.Delegator.CSLAccount = "newlisi";
                dg.Delegator.CILX500 = "newlisi";
                dg.Delegator.UPI = "CV-88889";
                dg.Delegator.AppAccount = "new CV-Li Si Account";



                Delegation dg2 = new Delegation();
                dg2.Module = "Module2...";
                dg2.Type = ModuleType.OperateAs;
                dg2.BeginDate = System.DateTime.Now;
                dg2.EndDate = dg2.BeginDate.AddMonths(3);
                dg2.Delegator = new AccountInfo();
                dg2.Delegator.HRISEID = "2new1234567";
                dg2.Delegator.ADAccount = "2newad4\\lisi";
                dg2.Delegator.CSLAccount = "2newlisi";
                dg2.Delegator.CILX500 = "2newlisi";
                dg2.Delegator.UPI = "2CV-88889";
                dg2.Delegator.AppAccount = "2new CV-Li Si Account";


                dgs.Items.Add(dg);
                dgs.Items.Add(dg2);


                AIDelegations aid = new AIDelegations();
                aid.AccountInfo = delaccountinfo;
                aid.Delegations = dgs;
                return aid;
            }
        }
        #endregion
        #endregion
    }
}
